// 猜密码
// 小杨申请了一个保密柜，但是他忘记了密码。只记得密码都是数字，而且所有数字都是不重复的。
// 请你根据他记住的数字范围和密码的最小数字数量，帮他算下有哪些可能的组合，规则如下：
// 1、输出的组合都是从可选的数字范围中选取的，且不能重复；
// 2、输出的密码数字要按照从小到大的顺序排列，密码组合需要按照字母顺序，从小到大的顺序排序。
// 3、输出的每一个组合的数字的数量要大于等于密码最小数字数量；
// 4、如果可能的组合为空，则返回“None”
// 输入描述:
// 1、输入的第一行是可能的密码数字列表，数字间以半角逗号分隔
// 2、输入的第二行是密码最小数字数量
// 输出描述:
// 可能的密码组合，每种组合显示成一行，每个组合内部的数字以半角逗号分隔，从小到大的顺序排列。
// 输出的组合间需要按照字典序排序。
// 比如：
// 2,3,4放到2,4的前面
// 示例1
// 输入
// 2,3,4
// 2

// 输出

// 2,3
// 2,3,4
// 2,4
// 3,4

// 说明

// 最小密码数量是两个，可能有三种组合：
// 2,3
// 2,4
// 3,4

// 三个密码有一种：
// 2,3,4

function getPasswordLists(str, minValue) {
    let arr = str.split(" ").map((e) => parseInt(e)).sort((a, b) => a - b);
    let ret = [];
    const getAllRes = (item, arrLists) => {
        let j = minValue - 1;

        while (j <= arr.length - 1) {
            if (j !== 0) {
                for (let i = 0; i <= arrLists.length - j; i++) {
                    let arrInput = arrLists.slice(i, i + j)
                    ret.push([item, ...arrInput])
                }
            } else {
                ret.push([item])
            }
            j++;
        }
    }
    for (let i = 0; i < arr.length; i++) {
        let c = arr[i];
        let rest = arr.slice(i + 1);
        getAllRes(c, rest)
    }
    console.log(ret)
}
// getPasswordLists('2 3 4', 2)
getPasswordLists('2 3 4 5', 2)
// getPasswordLists('2 0', 1)